'use strict';
const { formatDate, formatAmount } = require("../../utils/format");
const {OrderPaymentEnum, OrderStatusEnum, OrderPaymentStatusEnum, OrderDeliveryEnum} = require("../../utils/enum");
module.exports = app => {
  const { STRING, INTEGER, DATE, TEXT, DECIMAL } = app.Sequelize;

  const Order = app.model.define('order', {
    id: { type: INTEGER, primaryKey: true, autoIncrement: true },
    type: INTEGER,
    order_no: STRING(50),
    member_user_id: INTEGER,
    total_amount: {
      type: DECIMAL(10, 2),
      defaultValue: 0,
      get() {
        return formatAmount(this.getDataValue('total_amount'))
      }
    },
    discount_amount: {
      type: DECIMAL(10, 2),
      defaultValue: 0,
      get() {
        return formatAmount(this.getDataValue('discount_amount'))
      }
    },
    pay_amount: {
      type: DECIMAL(10, 2),
      defaultValue: 0,
      get() {
        return formatAmount(this.getDataValue('pay_amount'))
      }
    },
    points: INTEGER,
    status: { type: INTEGER, defaultValue: OrderStatusEnum.PENDING_PAYMENT },
    payment_type: { type: INTEGER, defaultValue: OrderPaymentEnum.WECHAT },
    payment_status: { type: INTEGER, defaultValue: OrderPaymentStatusEnum.PENDING },
    shipping_type: { type: STRING },
    shipping_fee: {
      type: DECIMAL(10, 2),
      defaultValue: 0,
      get() {
        return formatAmount(this.getDataValue('shipping_fee'))
      }
    },
    shipping_status: { type: INTEGER, defaultValue: 0 },
    shipping_company: STRING(100),
    tracking_number: STRING(100),
    recipient_name: STRING(50), // 收件人
    recipient_phone: STRING(20), // 收件人电话
    recipient_province: STRING(50), // 收件人省份
    recipient_city: STRING(50), // 收件人城市
    recipient_district: STRING(50), // 收件人地区
    recipient_address: STRING(255), // 收件人地址
    shipping_time: {
      type: DATE,
      get() {
        return formatDate(this.getDataValue('shipping_time'))
      }
    }, // 发货时间
    shipping_name: STRING(100), // 发货人
    shipping_phone: STRING(20), // 发货人电话
    completion_time: {
      type: DATE,
      get() {
        return formatDate(this.getDataValue('completion_time'))
      }
    }, // 完成时间
    remark: TEXT, // 备注
    wx_transaction_id: STRING(100), // 微信支付订单
    wx_prepay_id: STRING(100), // 微信预支付订单
    wx_pay_sign: TEXT, // 微信支付签名
    wx_pay_time: {
      type: DATE,
      get() {
        return formatDate(this.getDataValue('wx_pay_time'))
      }
    }, // 微信支付时间
    wx_pay_status: { type: INTEGER, defaultValue: 0 }, // 微信支付状态
    wx_refund_id: STRING(100), // 微信退款ID
    wx_refund_time: {
      type: DATE,
      defaultValue: new Date(),
      get() {
        return formatDate(this.getDataValue('wx_refund_time'))
      }
    }, // 微信退款时间
    wx_refund_amount: {
      type: DECIMAL(10, 2),
      defaultValue: 0,
      get() {
        return formatAmount(this.getDataValue('wx_refund_amount'))
      }
    }, // 微信退款金额
    create_time: {
      type: DATE,
      defaultValue: new Date(),
      get() {
        return formatDate(this.getDataValue('create_time'))
      }
    },
    update_time: {
      type: DATE,
      defaultValue: new Date(),
      get() {
        return formatDate(this.getDataValue('update_time'))
      }
    },
  },{
    tableName: 'order',
    timestamps: true, // 启用时间戳(createdAt, updatedAt)
    updatedAt: 'update_time', // 不想要 updatedAt
    createdAt: 'create_time', // 想要  createdAt 但是希望名称叫做 create_time
  });

  Order.associate = function() {
    app.model.Order.belongsTo(app.model.MemberUser, { foreignKey: 'member_user_id', as: 'memberUser' });
    app.model.Order.hasMany(app.model.OrderItem, { foreignKey: 'order_id', as: 'items' });
  };

  return Order;
};
// 建表语句 带注释
// CREATE TABLE `order` (
//   `id` int(11) NOT NULL AUTO_INCREMENT,
//   `order_no` varchar(50) DEFAULT NULL COMMENT '订单编号',
//   `member_user_id` int(11) DEFAULT NULL COMMENT '会员ID',
//   `total_amount` decimal(10,2) DEFAULT '0.00' COMMENT '订单总金额',
//   `discount_amount` decimal(10,2) DEFAULT '0.00' COMMENT '优惠金额',
//   `pay_amount` decimal(10,2) DEFAULT '0.00' COMMENT '实付金额',
//   `points` int(11) DEFAULT '0' COMMENT '使用积分',
//   `status` int(11) DEFAULT '0' COMMENT '订单状态',
//   `payment_type` int(11) DEFAULT '0' COMMENT '支付方式',
//   `payment_status` int(11) DEFAULT '0' COMMENT '支付状态',
//   `shipping_type` varchar(100) DEFAULT NULL COMMENT '物流方式',
//   `shipping_fee` decimal(10,2) DEFAULT '0.00' COMMENT '运费',
//   `shipping_status` int(11) DEFAULT '0' COMMENT '发货状态',
//   `shipping_company` varchar(100) DEFAULT NULL COMMENT '物流公司',
//   `tracking_number` varchar(100) DEFAULT NULL COMMENT '物流单号',
//   `recipient_name` varchar(50) DEFAULT NULL COMMENT '收件人',
//   `recipient_phone` varchar(20) DEFAULT NULL COMMENT '收件人电话',
//   `recipient_province` varchar(50) DEFAULT NULL COMMENT '收件人省份',
//   `recipient_city` varchar(50) DEFAULT NULL COMMENT '收件人城市',
//   `recipient_district` varchar(50) DEFAULT NULL COMMENT '收件人地区',
//   `recipient_address` varchar(255) DEFAULT NULL COMMENT '收件人地址',
//   `shipping_time` datetime DEFAULT NULL COMMENT '发货时间',
//   `shipping_name` varchar(100) DEFAULT NULL COMMENT '发货人',
//   `shipping_phone` varchar(20) DEFAULT NULL COMMENT '发货人电话',
//   `completion_time` datetime DEFAULT NULL COMMENT '完成时间',
//   `remark` text DEFAULT NULL COMMENT '备注',
//   `wx_transaction_id` varchar(100) DEFAULT NULL COMMENT '微信支付订单',
//   `wx_prepay_id` varchar(100) DEFAULT NULL COMMENT '微信预支付订单',
//   `wx_pay_sign` text DEFAULT NULL COMMENT '微信支付签名',
//   `wx_pay_time` datetime DEFAULT NULL COMMENT '微信支付时间',
//   `wx_pay_status` int(11) DEFAULT '0' COMMENT '微信支付状态',
//   `wx_refund_id` varchar(100) DEFAULT NULL COMMENT '微信退款ID',
//   `wx_refund_time` datetime DEFAULT NULL COMMENT '微信退款时间',
//   `wx_refund_amount` decimal(10,2) DEFAULT '0.00' COMMENT '微信退款金额',
//   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
//   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
//   PRIMARY KEY (`id`),
//   UNIQUE KEY `idx_order_no` (`order_no`),
//   KEY `idx_member_user_id` (`member_user_id`)
// ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
